# Управление техническим долгом
## Описание
Технический долг – это несделанная в проекте работа, которая будет мешать его развитию в будущем, если так и не будет выполнена. В технический долг не включаются баги или отложенные низкоприоритетные фичи. Технический долг – это, например, плохо спроектированная архитектура или запутанный код.

Управление техническим долгом – это его постоянный поиск, подсчёт стоимости и постепенное устранение.

## Почему ветка важна?
- В будущем команде проще будет поддерживать разрабатываемый ею проект
- Появляется возможность прогнозировать стоимость технических компромиссов
- Весь текущий технический долг переводится в разряд видимого и известного

## Что будет, если её не делать?
- Будет расти время на разработку и стоимость поддержки системы
  - Усложняется анализ кода, требуется много времени, чтобы разобраться в нём
  - Тяжелее вносить изменения – системы с техническим долгом отличаются хрупкостью
- В какой-то момент станет невозможной дальнейшая поддержка системы
  - Её придётся выводить из использования или переписывать с нуля

## На кого может быть делегирована?
На ответственного за проект разработчика или архитектора

## Примеры поведения
### Примеры плохого поведения
- Программист делает ошибки при разработке проекта, которые не отлавливаются на code review или статическим анализом
- Когда ситуация вынуждает осознанно писать код быстро и некачественно, к нему в будущем не возвращаются для рефакторинга
- Объем технического долга не известен руководству
- В команде не выделяется время на периодическое исправление технического долга
- Разработчики игнорируют мелкие дефекты качества и не пытаются их исправить на месте по правилу бойскаута

### Примеры хорошего поведения
- В каждом спринте выделяется определённый процент времени на решение технического долга
- Весь крупный технический долг инвентаризирован
- Неумышленный технический долг отлавливается ручными и автоматизированными проверками качества

## Способы прокачки
### Практика
#### Контроль качества внешним аудитом
Для того, чтобы оценить текущее состояние технического долга на проекте, можно привлечь внешних консультантов. Этот способ часто применяется при передаче проекта от одной компании к другой или при полной смене команды разработки.

Минусы:
- Внешние аудиторы не погружены в специфику проекта
- Это разовая проверка, которая позволяет получить только текущий срез состояния проекта
- Это довольно дорого
- Результат аудита сильно зависит от компетентности людей, которую трудно проверить

Плюсы:
- Глаз внешних людей не замылен

#### Code Review
Процесс code review детально описан в [отдельной ветке](/roles/technical-lead/product-quality/code-review.html).

#### Автоматизация оценки качества кода
Лучше всего бороться с кратковременным техническим долгом позволяет автоматизация проверки качества кода в CI. Для этого можно использовать подходящий для вашего языка статический анализатор. Точно стоит посмотреть на [SonarQube](https://www.sonarqube.org/) – скорее всего там уже есть подходящий вам плагин.

Минусы:
- Статические анализаторы не спасут от того, чтобы инвентаризировать крупный технический долг самостоятельно – о пробелах в вашей архитектуре и выбранном стеке технологий они не скажут
- Чтобы автоматическая оценка приносила пользу, нужно делать так, чтобы её показатели со временем улучшались, а обозначенный ею технический долг решался
- Численный показатель, который выдаётся наружу такими системами, скорее всего, очень далёк от реальности

Плюсы:
- Отлавливается много мелких ошибок и проблем, которые можно пропустить на code review
- Не отнимает много времени, не считая первичной настройки
- Можно задавать гибкие правила для своей команды
- Можно отслеживать увеличение или понижение технического долга

## Консультации
- [Telegram-чат TL Bootcamp](https://tlinks.run/tlbootcamp)

## Теория
### Статьи
- [Технические долги](https://blog.byndyu.ru/2008/12/blog-post.html)
- [Wikipedia on Technical Debt](https://en.wikipedia.org/wiki/Technical_debt)
- [Martin Fowler on Technical Debt](https://www.martinfowler.com/bliki/TechnicalDebt.html)
- [TechnicalDebtQuadrant](https://www.martinfowler.com/bliki/TechnicalDebtQuadrant.html)
- [Управление техническим долгом - Концепция Continuous Inspection](https://infostart.ru/public/622617/)

### Подкасты
- [Podlodka #77 – Технический долг](https://soundcloud.com/podlodka/podlodka-77-tekhnicheskiy-dolg)

### Видео
- [Debt Metaphor](https://www.youtube.com/watch?v=pqeJFYwnkjE)
- [Максим Смирнов. Как списать технический долг](https://www.youtube.com/watch?v=HRRv82L75wU)
